package vm

import (
	"z-lang/code"
	"z-lang/object"
)

// Frame 虚拟机栈栈帧(在编译器或解释器术语中，这有时也称为活动记录). 保存存储与当前执行相关的信息的数据结构, 比如: 返回地址、当前函数的参数、局部变量
type Frame struct {
	//fn          *object.CompiledFunction // 当前执行的函数
	cl          *object.Closure // 闭包
	ip          int             // 指令指针(类似于程序计数器)
	basePointer int             // 栈基址指针(类似于EBP ? ) 它是指向当前调用栈栈帧底部的指针
}

// NewFrame 构建一个全新的栈帧
//func NewFrame(fn *object.CompiledFunction, basePointer int) *Frame {
//	return &Frame{fn: fn, ip: -1, basePointer: basePointer}
//}

// NewFrame 构建一个全新的栈帧
func NewFrame(closure *object.Closure, basePointer int) *Frame {
	return &Frame{cl: closure, ip: -1, basePointer: basePointer}
}

// Instructions 获取栈帧方法的字节码
func (f *Frame) Instructions() code.Instructions {
	return f.cl.Fn.Instructions
}
